﻿#ifndef __DAHUA_GENICAM_IUSBCAMERA_H__
#define __DAHUA_GENICAM_IUSBCAMERA_H__

#include "GenICam/Defs.h"
#include "GenICam/Camera.h"
#include "Infra/String.h"
#include "Memory/SharedPtr.h"

GENICAM_NAMESPACE_BEGIN

class IUsbCamera;
typedef Memory::TSharedPtr<IUsbCamera> IUsbCameraPtr;

/// \~chinese
/// \brief 鐩告満瀵硅薄鎺ュ彛绫?
/// \defgroup UsbCamera  Usb鐩告満瀵硅薄鎿崭綔鎺ュ彛
/// \~english
/// \brief	camera object interface class
/// \defgroup UsbCamera API for U3V Cameras Only
/// @{

/// \~chinese
/// \brief Usb鐩告満瀵硅薄
/// \~english
/// \brief Usb camera object
class GENICAM_API IUsbCamera
{
protected:
    /// \~chinese
    /// \brief 鏋愭瀯鍑芥暟
    /// \~english
    /// \brief destruct function 
    virtual ~IUsbCamera(){}

public:
    /// \~chinese
    /// \brief Usb鐩告満瀵硅薄銮峰彇鎺ュ彛锛屽悓涓€涓猚ameraPtr瀵瑰簲镄勬槸鍚屼竴涓猆sb鐩告満瀵硅薄
    /// \param [in] cameraPtr  Usb绫诲瀷镄勭浉链烘櫤鑳芥寚阍埚璞?濡傛灉浼犲叆浜嗗叾瀹冮潪Usb鐩告満绫诲瀷锛岃鎺ュ彛杩斿洖绌烘寚阍?琛ㄧず镞犳晥
    /// \~english
    /// \brief Usb camera object access interface, same cameraPtr is correspond to same Usb camera object
    /// \brief [in] cameraPtr Smart pointer object of Usb camera, if the cameraPtr point to a camera which is not Usb camera, the interface return NULL which means it is invalid
    static  IUsbCameraPtr getInstance(const ICameraPtr &cameraPtr);

    /// \~chinese
    /// \brief 銮峰彇鐩告満镄?Configuration Valid
    /// \return 杩斿洖鐩告満镄?Configuration Valid锛屽け璐ヨ繑锲濶ULL
    /// \~english
    /// \brief	get Configuration Valid of camera
    /// \return success:return Configuration Valid of camera, fail:return NULL
    virtual const char * getConfigurationValid() = 0;

    /// \~chinese
    /// \brief 銮峰彇鐩告満镄?GenCP Version
    /// \return 杩斿洖鐩告満镄凣enCP Version锛屽け璐ヨ繑锲濶ULL
    /// \~english
    /// \brief	get subnetMask of camera
    /// \return success:return camera's subnetMask, fail:return NULL
    virtual const char * getGenCPVersion() = 0;

    /// \~chinese
    /// \brief 杩斿洖鐩告満镄刄3V Version
    /// \return 杩斿洖鐩告満镄刄3V Version锛屽け璐ヨ繑锲濶ULL
    /// \~english
    /// \brief  get U3V Version of camera
    /// \return success:return camera's U3V Version, fail:return NULL
    virtual const char * getU3VVersion() = 0;

    /// \~chinese
    /// \brief 銮峰彇鐩告満镄?Device GUID
    /// \return 杩斿洖鐩告満镄凣UID锛屽け璐ヨ繑锲濶ULL
    /// \~english
    /// \brief  get Device GUID of camera
    /// \return success:return camera's GUID, fail:return NULL
    virtual const char * getDeviceGUID() = 0;

    /// \~chinese
    /// \brief 銮峰彇鐩告満镄?Family Name
    /// \return 杩斿洖鐩告満镄凢amily Name锛屽け璐ヨ繑锲濶ULL
    /// \~english
    /// \brief  get Family Name of camera
    /// \return success:return camera's Family Name, fail:return NULL
    virtual const char * getFamilyName() = 0;

    /// \~chinese
    /// \brief 銮峰彇鐩告満镄勫簭鍒楀佛
    /// \return 杩斿洖鐩告満镄勫簭鍒楀佛锛屽け璐ヨ繑锲濶ULL
    /// \~english
    /// \brief	get serial number of camera
    /// \return success:return camera's serial number, fail:return NULL
    virtual const char * getU3VSerialNumber() = 0;

    /// \~chinese
    /// \brief 銮峰彇鐩告満镄?Low Speed Support
    /// \return 杩斿洖鐩告満镄?Low Speed Support
    /// \~english
    /// \brief	get Low Speed Support of camera
    /// \return success:return camera's Low Speed Support
    virtual bool isLowSpeedSupported() const = 0;

    /// \~chinese
    /// \brief 銮峰彇鐩告満镄?Full Speed Support
    /// \return 杩斿洖鐩告満镄凢ull Speed Support
    /// \~english
    /// \brief	get Full Speed Support of camera
    /// \return success:return camera's Full Speed Support
    virtual bool isFullSpeedSupported() const = 0;

    /// \~chinese
    /// \brief 銮峰彇鐩告満镄?High Speed Support
    /// \return 杩斿洖鐩告満镄?High Speed Support
    /// \~english
    /// \brief  get High Speed Support of camera
    /// \return success:return camera's High Speed Support
    virtual bool isHighSpeedSupported() const = 0;

    /// \~chinese
    /// \brief 銮峰彇鐩告満镄?Super Speed Support
    /// \return 杩斿洖鐩告満镄?Super Speed Support
    /// \~english
    /// \brief  get Super Speed Support of camera
    /// \return success:return camera's Super Speed Support
    virtual bool isSuperSpeedSupported() const = 0;

    /// \~chinese
    /// \brief 銮峰彇鐩告満镄?Speed
    /// \return 杩斿洖鐩告満镄?Speed锛屽け璐ヨ繑锲濶ULL
    /// \~english
    /// \brief  get Speed of camera
    /// \return success:return camera's Speed, fail:return NULL
    virtual const char * getSpeed() = 0;

    /// \~chinese
    /// \brief 銮峰彇鐩告満镄?Max Power
    /// \return 杩斿洖鐩告満镄?Max Power锛屽け璐ヨ繑锲濶ULL
    /// \~english
    /// \brief  get Max Power of camera
    /// \return success:return camera's Max Power, fail:return NULL
    virtual const char * getMaxPower() = 0;

    /// \~chinese
    /// \brief 銮峰彇鐩告満镄?Driver Installed
    /// \return 杩斿洖鐩告満镄?Driver Installed
    /// \~english
    /// \brief  get Driver Installed of camera
    /// \return success:return camera's Driver Installed
    virtual bool isDriverInstalled() const = 0;
};

/// @}

GENICAM_NAMESPACE_END

#endif//__DAHUA_GENICAM_IUSBCAMERA_H__